Yii 可以輕鬆地在不使用基本和進階範本所包含的功能下使用。換句話說,Yii 本身就是一個微框架。使用 Yii 並不需要範本所提供的目錄結構。
當您不需要所有預定義的範本代碼(例如資源或視圖)時,這特別方便。其中一種情況是建構 JSON API。以下章節將展示如何做到這一點。
為您的專案檔案建立一個目錄,並將工作目錄更改為該路徑。範例中使用的命令是基於 Unix 的,但 Windows 中也存在類似的命令。
mkdir micro-app
cd micro-app
注意: 繼續操作需要一些 Composer 知識。如果您還不知道如何使用 Composer,請花時間閱讀 Composer 指南。
使用您最喜歡的編輯器在 micro-app
目錄下建立檔案 composer.json
,並新增以下內容
{
"require": {
"yiisoft/yii2": "~2.0.0"
},
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
}
儲存檔案並執行 composer install
命令。這將安裝框架及其所有依賴項。
在您安裝框架之後,現在是時候為應用程式建立一個入口點了。入口點是當您嘗試開啟應用程式時將執行的第一個檔案。基於安全考量,建議將入口點檔案放在一個單獨的目錄中,並使其成為網站根目錄。
建立一個 web
目錄,並將 index.php
放入其中,內容如下
<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$config = require __DIR__ . '/../config.php';
(new yii\web\Application($config))->run();
另外建立一個名為 config.php
的檔案,其中將包含所有應用程式配置
<?php
return [
'id' => 'micro-app',
// the basePath of the application will be the `micro-app` directory
'basePath' => __DIR__,
// this is where the application will find all controllers
'controllerNamespace' => 'micro\controllers',
// set an alias to enable autoloading of classes from the 'micro' namespace
'aliases' => [
'@micro' => __DIR__,
],
];
資訊: 即使配置可以保留在
index.php
檔案中,也建議將其分開。這樣它也可以用於主控台應用程式,如下所示。
您的專案現在已準備好進行編碼。雖然專案目錄結構由您決定,但只要您遵守命名空間即可。
建立一個 controllers
目錄,並新增檔案 SiteController.php
,這是預設控制器,將處理沒有路徑資訊的請求。
<?php
namespace micro\controllers;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionIndex()
{
return 'Hello World!';
}
}
如果您想為此控制器使用不同的名稱,您可以更改它並相應地配置 yii\base\Application::$defaultRoute。例如,對於 DefaultController
,那將是 'defaultRoute' => 'default/index'
。
此時專案結構應如下所示
micro-app/
├── composer.json
├── config.php
├── web/
└── index.php
└── controllers/
└── SiteController.php
如果您尚未設定 Web 伺服器,您可能需要查看 Web 伺服器設定檔範例。另一個選項是使用 yii serve
命令,它將使用 PHP 內建的 Web 伺服器。您可以從 micro-app/
目錄透過以下方式運行它
vendor/bin/yii serve --docroot=./web
現在在瀏覽器中開啟應用程式 URL 應該會印出「Hello World!」,這是 SiteController::actionIndex()
中返回的。
資訊: 在我們的範例中,我們已將預設應用程式命名空間
app
更改為micro
,以示範您不受該名稱的約束(如果您認為您受約束),然後調整了控制器命名空間並設定了正確的別名。
為了示範我們「微框架」的用法,我們將為文章建立一個簡單的 REST API。
為了讓此 API 提供一些資料,我們首先需要一個資料庫。將資料庫連線配置新增至應用程式配置
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'sqlite:@micro/database.sqlite',
],
],
資訊: 為了簡單起見,我們在這裡使用 sqlite 資料庫。請參閱 資料庫指南 以獲取更多選項。
接下來,我們建立資料庫遷移以建立文章表。請確保您有一個單獨的設定檔,如上所述,我們需要它來運行以下主控台命令。運行以下命令將建立一個資料庫遷移檔案並將遷移應用於資料庫
vendor/bin/yii migrate/create --appconfig=config.php create_post_table --fields="title:string,body:text"
vendor/bin/yii migrate/up --appconfig=config.php
建立目錄 models
和該目錄中的 Post.php
檔案。這是模型的代碼
<?php
namespace micro\models;
use yii\db\ActiveRecord;
class Post extends ActiveRecord
{
public static function tableName()
{
return '{{post}}';
}
}
資訊: 此處建立的模型是一個 ActiveRecord 類別,它表示來自
post
表的資料。請參閱 Active Record 指南 以獲取更多資訊。
為了在我們的 API 上提供文章,請在 controllers
中新增 PostController
<?php
namespace micro\controllers;
use yii\rest\ActiveController;
class PostController extends ActiveController
{
public $modelClass = 'micro\models\Post';
public function behaviors()
{
// remove rateLimiter which requires an authenticated user to work
$behaviors = parent::behaviors();
unset($behaviors['rateLimiter']);
return $behaviors;
}
}
此時我們的 API 將提供以下 URL
/index.php?r=post
- 列出所有文章/index.php?r=post/view&id=1
- 顯示 ID 為 1 的文章/index.php?r=post/create
- 建立文章/index.php?r=post/update&id=1
- 更新 ID 為 1 的文章/index.php?r=post/delete&id=1
- 刪除 ID 為 1 的文章從這裡開始,您可能需要查看以下指南以進一步開發您的應用程式
發現錯字或您認為此頁面需要改進?
在 GitHub 上編輯 !
註冊 或 登入 以發表評論。